layui.define(['jquery', 'jqelem','layer'], function(exports) {
    var $ = layui.jquery,
        app = layui.data('app'),
    zzpUtils= function(){};

    /**
     * 格式化url
     * @param isApi
     * @param url
     * @returns {string}
     */
    zzpUtils.prototype.formatUrl = function (url) {
        return app.contextPath + url;
    };
    zzpUtils.prototype.tableInit=function(option){
        $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['zh-CN']);
        var elem = option.elem,
            _option = {
                //始终显示分页
                smartDisplay:false,
                //toolbar
                toolbar: '#toolbar',
                isApi: true,//自定义属性是否遵循api 版本
                isOperate: true,//是否开启操作工具条
                idField: 'id',
                method: 'post',
                dataType: 'json',
                sidePagination: 'server',
                pagination: true,//是否分页
                pageList: [10, 20, 30, 40],
                pageNumber:1,
                pageSize:5,
                showColumns:true,
                //是否切换card方式
                showToggle:true,
                //导出方式
                exportDataType: "all",
                //显示导出
                showExport: true,
                clickToSelect: true,
                exportTypes:[ 'csv', 'txt', 'sql', 'doc', 'excel', 'xlsx', 'pdf'],  //导出文件支持: 'json', 'xml', 'png', 'csv', 'txt', 'sql'，'doc', 'excel', 'xlsx', 'pdf'
                Icons:'glyphicon-export',
                showFooter:false ,//	是否true显示列脚
                responseHandler: function (res) {//处理相应
                    return res;
                },
                // detailView: true,
                // detailFormatter: function (index, row) {
                //     return "这里还没有确定";
                // },
                cardView: false,//设置为 true将显示card视图，适用于移动设备。否则为table试图，适用于pc
                undefinedText: '-',//当数据为 undefined 时显示的字符
                // height: getHeight(),
                //queryParamsType: 'limit'//请求参数
                queryParamsType: 'limit===this.options.queryParamsType&&(i={search:i.searchText,sort:i.sortName,order:i.sortOrder},this.options.pagination&&(i.offset=this.options.pageSize===this.options.formatAllRows()?0:this.options.pageSize*(this.options.pageNumber-1),i.limit=this.options.pageSize===this.options.formatAllRows()?this.options.totalRows:this.options.pageSize, i.pageNumber=this.options.pageNumber))'//请求参数
            };
        option.url = utils.formatUrl(option.url);
        _option = $.extend(true, _option, option);//继承

        // _option.url = (_option.isApi) ? Tool.app.version + option.url : option.url;//url 路劲
        // _option.url = Tool.formatUrl(_option.isApi, _option.url);
        _option.queryParams = function (data) {//查询参数
            if (typeof option.queryParams === 'undefined') {
                return data;
            } else if (typeof option.queryParams === 'function') {
                var _data = option.queryParams();
                data={
                    'page':data.pageNumber,
                    'rows':data.pageSize
                }
                if (data === 'undefined') {
                    _data = '';
                } else if (typeof _data === "string") {
                    _data = {
                        'data_': _data
                    };
                    console.info(_data);

                } else if (typeof _data === "function") {

                    layui.hint().error("table queryParams 最好返回对象")
                }
                console.info(data);
                data = $.extend(true, data, _data);


                return $.extend(true, data, _data);
            }
        };
        if (_option.isOperate) {
            var columns = _option.columns,
                oThis = this;
            // columns.push({
            //     field: 'operate_',
            //     formatter: oThis.operateFormatter(),
            //     events: oThis.operateEvents
            // });
        }
        // function getHeight() {
        //     return $(window).height() - ($(joyiHead).outerHeight(true) + $(joyiQuote).outerHeight(true)) - ($(joyiBody).outerHeight(true) - $(joyiBody).height()) - fiexHeight;
        // }

        $(window).resize(function () {
            // $(elem).bootstrapTable('resetView', {
            //     height: getHeight()
            // });
        });

        return $(elem).bootstrapTable(_option);
    }
    zzpUtils.prototype.table = function (options) {
        var _this=this;
        //初始化table
        return _this.tableInit(options);
    };
    zzpUtils.prototype.refreshTable = function(option){
        $(option).bootstrapTable('refresh');
    };
    zzpUtils.prototype.fullDialog = function (option) {
        var _option={
            title: "标题",
            type:2,
            content: "#",
            isFull:false
        }
        _option = $.extend(true, _option, option);//继承
        var _index = layui.layer.open({
            title : _option.title,
            type : _option.type,
            content : utils.formatUrl(_option.content),
            success : function(layero, index){
                try{
                    _option.success(layero, index);
                }catch(e){
                    console.log(e.message);
                }

            },cancel: function (index, layero) {
                layui.layer.confirm('信息未保存是否关闭', {
                    btn: ['是', '否'],
                    anim: 6,
                    shade: 0,
                    closeBtn: 2,
                    icon: 3
                }, function (index) {
                    layer.close(index);
                    layer.close(_index);
                }, function (index) {
                    layer.close(index);
                });
                return false;
            }
        });
        setTimeout(function(){
            layui.layer.tips('点击此处返回用户列表', '.layui-layer-setwin .layui-layer-close', {
                tips: [1, '#3595CC']
            });
        },500)
        //改变窗口大小时，重置弹窗的高度，防止超出可视区域（如F12调出debug的操作）

        $(window).resize(function () {
            $("#layui-layer"+_index).css({"width":$(document).width(),"height":$(document).height(),"top":"0px","left":"0px"});
            //TODO 这里弹框内容高度变化还没有调整好回头在看
            $("#layui-layer-iframe"+_index).css({"width":$(document).width(),"height":$(document).height(),"top":"0px","left":"0px"});
        });
        layui.layer.full(_index);
        return _index;
    }
    /**
     * 打开普通信息页面
     * @param option
     */
    zzpUtils.prototype.dialog = function (option) {
        var _option = {
            isApi: false
            , title: '标题'
            , type: 2
            , offset: 'auto' //具体配置参考：http://www.layui.com/doc/modules/layer.html#offset
            , id: 'layerDemo'//防止重复弹出
            , content: '/'
            , btn: ['保存', '取消']
            , btnAlign: 'r' //按钮居中
            , shade: [0.8, '#393D49'] //不显示遮罩
            , closeBtn: 0//不显示关闭按钮
            , area: ['60%', '95%']
            , success: function (layero, index, body, iframe) {
                console.log(layero, index, body, iframe);
            }
            , yes: function (index, layero, body, iframe) {
                layer.msg('To do something');
                layer.close(index);
            }
            , end: function () {
            }
        };
        _option = $.extend(true, _option, option);
        var _index = top.layer.open({
            title: _option.title
            , type: _option.type
            , offset: _option.offset //具体配置参考：http://www.layui.com/doc/modules/layer.html#offset
            , id: _option.id//防止重复弹出
            , content: utils.formatUrl(_option.content)
            , btn: _option.btn
            , btnAlign: _option.btnAlign //按钮居中
            , shade: _option.shade //不显示遮罩
            , closeBtn: _option.closeBtn//不显示关闭按钮
            , area: _option.area
            , scrollbar: false
            , success: function (layero, index) {
                var body = top.layer.getChildFrame('body', index);
                var iframe = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象，执行iframe页的方法：iframeWin.method();
                _option.success(layero, index, body, iframe);
            }
            , yes: function (index, layero) {
                var body = top.layer.getChildFrame('body', index);
                var iframe = window[layero.find('iframe')[0]['name']];
                _option.yes(index, layero, body, iframe);
                layer.close(index);

            }, btn2: function (data) {
                top.layer.confirm('信息未保存是否关闭', {
                    btn: ['是', '否'],
                    anim: 6,
                    shade: 0,
                    closeBtn: 2,
                    icon: 3
                }, function (index) {
                    top.layer.close(index);
                    layer.close(_index);
                }, function (index) {
                    top.layer.close(index);
                });
                return false;
            },
            end: function () {
                _option.end();
            }
        });
        return _index;
    };
    /**
     * 信息提示框
     * @param option
     */
    zzpUtils.prototype.confirm = function (message, option) {
        var _option = {
            btn: ['是', '否'],
            anim: 6,
            shade: 0,
            closeBtn: 2,
            icon: 3,
            yes: function (index) {
                if(typeof option =="function"){
                    option();
                }
                top.layer.close(index);
            },
            cancel: function (index) {
            }
        };
        _option = $.extend(true, _option, option);
        top.layer.confirm(message, {
            btn: _option.btn,
            anim: _option.anim,
            shade: _option.shade,
            closeBtn: _option.closeBtn,
            icon:_option.icon
        }, function (index) {
            _option.yes(index);
        }, function (index) {
            _option.cancel(index);
        });
    };
    /**
     * 提示信息
     * @param message
     * @param option
     */
    zzpUtils.prototype.msg = function (message, option) {
        var _option = {
            icon: 6,
            anim: 6,
            isParent: true,
            end: function () {
            }
        };
        _option = $.extend(true, _option, option);
        if (_option.isParent) {
            parent.layer.msg(message, _option, function () {
                _option.end();
            });
        } else {
            layer.msg(message, _option, function () {
                _option.end();
            });
        }

    };
    /**
     * ajax 请求
     * @param option
     */
    zzpUtils.prototype.ajax = function (option) {
        var _option = {
            isApi: true,
            url: '',
            type: 'post',
            async: true,
            data: {},
            timeout: 5000,
            contentType: 'application/json',
            dataType: 'json',
            success: function (data, textStatus, jqXHR) {
                option.success(data, textStatus, jqXHR);
            },
            error: function (xhr, textStatus) {
            }
        };
        _option = $.extend(true, _option, option);

        _option.url = utils.formatUrl(_option.url);
        $.ajax(_option);

    };
    /**
     * get 请求
     * @param isApi
     * @param url
     * @param callback
     */
    zzpUtils.prototype.get = function (isApi, url, callback) {
        $.get(url, callback);
    };

    /**
     * post 请求
     * @param isApi
     * @param url
     * @param data
     * @param callback
     */
    zzpUtils.prototype.post = function (isApi, url, data, callback) {
        $.post(url, data, callback);
    };
    // /**
    //  * 加载from 表单
    //  * @param target
    //  * @param data
    //  */
    // zzpUtils.prototype.formLoad = function (target, data) {
    //     var form = $(target);
    //     for (var name in data) {
    //         var val = data[name];
    //         if (!_checkField(name, val)) {
    //             if (!_loadBox(name, val)) {
    //                 form.find('input[name="' + name + '"]').val(val);
    //                 form.find('textarea[name="' + name + '"]').val(val);
    //                 form.find('select[name="' + name + '"]').val(val);
    //             }
    //         }
    //     }
    //     /**
    //      * check the checkbox and radio fields
    //      */
    //     function _checkField(name, val) {
    //         var cc = $(target).find('input[name="' + name + '"][type=radio], input[name="' + name + '"][type=checkbox]');
    //         if (cc.length) {
    //             cc._propAttr('checked', false);
    //             cc.each(function () {
    //                 var f = $(this);
    //                 if (f.val() == String(val) || $.inArray(f.val(), $.isArray(val) ? val : [val]) >= 0) {
    //                     f._propAttr('checked', true);
    //                 }
    //             });
    //             return true;
    //         }
    //         return false;
    //     }
    //
    //     function _loadBox(name, val) {
    //         var field = $(target).find('[textboxName="' + name + '"],[sliderName="' + name + '"]');
    //         if (field.length) {
    //             for (var i = 0; i < opts.fieldTypes.length; i++) {
    //                 var type = opts.fieldTypes[i];
    //                 var state = field.data(type);
    //                 if (state) {
    //                     if (state.options.multiple || state.options.range) {
    //                         field[type]('setValues', val);
    //                     } else {
    //                         field[type]('setValue', val);
    //                     }
    //                     return true;
    //                 }
    //             }
    //         }
    //         return false;
    //     }
    // };

    var utils= new zzpUtils();
    /**
     *暴露接口
     */
    exports("zzpUtils", utils);
});